import java.util.*;

public class Test {

    /**
     *
     * 现有N个任务需要处理，同一时间只能处理一个任务，处理每个任务所需要的时间固定为1。
     * 每个任务都有最晚处理时间限制和积分值，在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。
     * 可用于处理任务的时间有限，请问在有限的时间内，可获得的最多积分。
     *
     *
     * 第一行为一个数N，表示有N个任务，1<=N<=100
     * 第二行为一个数T，表示可用于处理任务的时间。1<=T<=100
     * 接下来N行，每行两个空格分隔的整数(SLA和V)，SLA表示任务的最晚处理时间，V表示任务对应的积分。1<=SLA<=100, 0<=V<=100000第一行为一个数N，表示有N个任务，1<=N<=100
     * 第二行为一个数T，表示可用于处理任务的时间。1<=T<=100
     * 接下来N行，每行两个空格分隔的整数(SLA和V)，SLA表示任务的最晚处理时间，V表示任务对应的积分。1<=SLA<=100, 0<=V<=100000
     *
     * 可获得的最多积分
     * 输入
     * 4
     * 3
     * 1 2
     * 1 3
     * 1 4
     * 1 5
     *
     * 输出
     * 5
     * 虽然有3个单位的时间用于处理任务，可是所有任务在时刻1之后都无效。
     * 所以在第1个时间单位内，选择处理有5个积分的任务。1-3时无任务处理。
     *
     * ====
     * 输入
     * 4
     * 3
     * 1 2
     * 1 3
     * 1 4
     * 3 5
     *
     * 输出
     * 9
     * 第1个时间单位内，处理任务3，获得4个积分
     * 第2个时间单位内，处理任务4，获得5个积分
     * 第3个时间单位内，无任务可处理
     * 共获得9个积分
     *
     *
     * @param args
     */
    public static void main(String[] args) {
        //    同一时间只能处理一个任务，处理每个任务所需要的时间固定为1
        //    第一行为一个数N，表示有N个任务，1<=N<=100
        //     * 第二行为一个数T，表示可用于处理任务的时间。1<=T<=100
        //     * 接下来N行，每行两个空格分隔的整数(SLA和V)，SLA表示任务的最晚处理时间，V表示任务对应的积分。
        //     1<=SLA<=100, 0<=V<=100000第一行为一个数N，表示有N个任务，1<=N<=100
        //     * 第二行为一个数T，表示可用于处理任务的时间。1<=T<=100
        Scanner scanner = new Scanner(System.in);
        int size = scanner.nextInt();
        //表示能处理的个数，可能小于数组大小
        int time = scanner.nextInt();
        int[][] input = new int[size][2];
        for(int i =0; i< size; i++){
            input[i][0] = scanner.nextInt();
            input[i][1] = scanner.nextInt();
        }

        //记录每个时间的最大值
        Map<Integer, Integer> map = new HashMap<>(time);
        for(int i = 0; i < input.length; i++){
            int key = input[i][0];
            int value = input[i][1];
            if(!map.containsKey(key)){
                map.put(key,value);
                continue;
            }
            if(map.get(key)<value){
                map.put(key,value);
            }
        }

        int sum = 0;
        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        for (Map.Entry<Integer, Integer> entry : entries) {
            sum += entry.getValue();
        }
        System.out.println(sum);
    }
}
